#ifndef EXCEL_H
#define EXCEL_H

#include <QObject>
#include <QAxObject>
#include <QAxSelect>
#include <QAxWidget>

class Excel : public QObject
{
    Q_OBJECT
public:
    explicit Excel(QObject *parent = nullptr);
    ~Excel();

    void addSheet(const QString& sheetName = QStringLiteral("Sheet1"));  // 增加新的工作表并作为当前工作表，可以指定表名
    void appendRow(const QVariantList &oneRow);  // 往当前工作表中追加一行数据
    void open(QString file = QStringLiteral("")); // 打开一个存在的excel文件，如不指定文件名，提供文件对话框交互
    void save(QString file = QStringLiteral("")); // 保存为excel，如不指定文件名，提供文件对话框用于交互

    void setCurSheet(const QString &name); // 根据工作表名设置当前工作表
    void setCurSheet(int index); // 根据索引设置当前工作表,从1开始
    void delSheet(const QString &name);  // 根据工作表名删除工作表
    void delSheet(int index);   // 根据工作表索引删除工作表
    int getRowsCount();   // 获取当前工作表的行数
    int getColumnsCount(); // 获取当前工作表的列数
    QVariant getCell(int r, int c);  // 获取当前工作表相应单元格的值
    void setCell(int r, int c, QVariant v); // 设置单元格的值
    int getSheetsCount();  // 获取工作簿的工作表个数

private slots:
    void dealException(int, QString, QString, QString);  // 处理异常

private:
    QAxObject *excelApp;   // 连接Excel控件
    QAxObject *workBook;   // 当前工作簿
    QAxObject *workSheets; // 工作表集合
    QAxObject *curWorkSheet;  // 当前工作表
    QAxObject *range;      // 范围单元格
    QAxObject *cells;      // 多个单元格

    QVariantList rowsData;
    int curRow = 0;

};

#endif // EXCEL_H
